package tree;

/**
 * @author: june
 * @date: 2023/7/18
 * <p>
 * 530. 二叉搜索树的最小绝对差
 * <p>
 * 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。
 * 差值是一个正数，其数值等于两值之差的绝对值。
 **/

public class MinAbsDiffInBst_530 {
    int minVal = Integer.MAX_VALUE;
    // 记录前一个节点
    TreeNode pre;

    public int getMinimumDifference(TreeNode root) {
        midTraversal(root);
        return minVal;
    }

    private void midTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        // 利用二叉搜索树的中序遍历是升序解答，前一个结点和后一个结点求差值并存储最小差值即可。
        midTraversal(root.left);
        if (pre != null) {
            minVal = Math.min(minVal, root.val - pre.val);
        }
        pre = root;
        midTraversal(root.right);
    }
}
